//
//  Persons.m
//  DebugDemo
//
//  Created by XFB on 2018/11/12.
//  Copyright © 2018年 ZhouCheng. All rights reserved.
//

#import "Persons.h"
#import "Dog.h"
#import "Book.h"

@implementation Persons

+ (instancetype)personsModelWithDict:(NSDictionary *)dict
{
    Persons *p = [[Persons alloc] init];
    
    /// KVC 使用setValuesForKeysWithDictionary:方法，该方法默认根据字典中每个键值对，调用setValue:forKey方法
    /// 缺点：字典中的键值对必须与模型中的键值对完全对应，否则程序会崩溃
    [p setValuesForKeysWithDictionary:dict];
    
    p.dog = [[Dog alloc] init];
    [p.dog setValuesForKeysWithDictionary:dict[@"dog"]];
    
    /// 保存模型可变数组
    NSMutableArray *mutableArrayM = @[].mutableCopy;
    for (NSDictionary *bookDict in dict[@"books"]) {
        /// 创建模型
        Book *bookM = [[Book alloc] init];
        /// KVC
        [bookM setValuesForKeysWithDictionary:bookDict];
        /// 保存模型
        [mutableArrayM addObject:bookM];
    }
    p.books = mutableArrayM;
    
    /**
     缺点：
     1.字典中的键值对很复杂，不适合用KVC是
     2.服务器返还的数据，你可能不会全用上，如果模型一个个写属性可能比较麻烦，所以不建议KVC转模型 因为服务器返回上百个
     */
    
    return p;
}


- (void)setValue:(id)value forUndefinedKey:(NSString *)key {}

@end
